As more applications, continue to take advantage of the parallel processing capabilities of multi-processing systems and microprocessors, there is a growing need to share computing resources based on the type of work being done. For example, parallel programs can make use of specialized processing hardware, such as a GPU, whereas more sequentially executing programs can make use of a general purpose CPU. As parallel and sequential operations are comingled more in modern programs, making use of both CPU and GPU resources concurrently or serially will help optimize the computing resources for the type of operations or programs being run.